home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / bin / pysupport-parseversions < prev    next >
Text File  |  2006-11-23  |  2KB  |  89 lines

  1. #! /usr/bin/python
  2. #
  3. # copyright (c) 2006 Josselin Mouette <joss@debian.org>
  4. # Licensed under the GNU Lesser General Public License, version 2.1
  5. # See COPYING for details
  6.  
  7. from optparse import OptionParser
  8. import sys,os.path
  9. sys.path.append("/usr/lib/python-support/private/")
  10. import pysupport
  11.  
  12. parser = OptionParser(usage="usage: %prog [options] file.pyversions")
  13.  
  14. parser.add_option ("--minmax", action="store_true", dest="minmax", help="display minimum and maximum python versions described by the file", default=False)
  15. parser.add_option ("-l", "--long", action="store_true", dest="long", help='prepend versions with "python"',default=False)
  16. parser.add_option ("--pycentral", action="store_true", dest="pycentral", help="Parse a pycentral-type version string instead",default=False)
  17. parser.add_option ("--raw", action="store_true", dest="raw", help="Output the raw input string (useful with --pycentral)",default=False)
  18. parser.add_option ("--all", action="store_true", dest="all", help="List all supported versions instead of parsing a file",default=False)
  19.  
  20. (options, args) = parser.parse_args()
  21.  
  22. if options.all:
  23.   f=iter(['-'])
  24. else:
  25.   if len(args) < 1:
  26.     f=sys.stdin
  27.   else:
  28.     f=file(args[0])
  29.  
  30. if options.pycentral:
  31.   import re
  32.   l=None
  33.   for line in f:
  34.     if line.startswith("XS-Python-Version:"):
  35.       l=line.split(':')[1]
  36.       break
  37.   if not l: 
  38.     print "XS-Python-Version header not found."
  39.     sys.exit(1)
  40.   min=max=""
  41.   out=[]
  42.   for elem in l.split(','):
  43.     elem=elem.strip()
  44.     if elem=="all":
  45.       min=max=""
  46.       out=["-"]
  47.       break
  48.     if elem=="current":
  49.       out.append(os.readlink("/usr/bin/python")[6:])
  50.       continue
  51.     a=re.match(">=\s*([\d\.]+)",elem)
  52.     if a:
  53.       min=a.group(1)
  54.       continue
  55.     a=re.match("<<\s*([\d\.]+)",elem)
  56.     if a:
  57.       try:
  58.         max=a.group(1).split(".")
  59.         max[1]=`int(max[1])-1`
  60.         max='.'.join(max)
  61.       except IndexError:
  62.         max=""
  63.       continue
  64.     a=re.match("^[\d\.]+$",elem)
  65.     if a:
  66.       out.append(elem)
  67.   if min or max:
  68.     out.append(min+"-"+max)
  69.   stringtoparse=','.join(out)
  70. else:
  71.   stringtoparse=f.next()
  72.  
  73. if options.raw:
  74.   print stringtoparse.rstrip('\n')
  75.   sys.exit(0)
  76.  
  77. v=pysupport.version_list(stringtoparse)
  78. if options.long:
  79.   print ' '.join(v)
  80. else:
  81.   print ' '.join(v.verlist)
  82.  
  83. if options.minmax:
  84.   min=v.min
  85.   if options.long and min: min="python"+min
  86.   max=v.max
  87.   if options.long and max: max="python"+max
  88.   print min, max
  89.